// components/category/blade.js

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    productData: {
        type: Array, // 类型：String, Number, Boolean, Object, Array, null（表示不限类型）
        value: [],     // 默认值，当父组件未传递该属性时使用
        observer: function(newVal, oldVal) {   // 数值再次传递进来时进行更新。
          // console.log('productData 变化了', newVal);
          this.setData({
            products: newVal
            // filteredProducts: newVal
          });
          this.filterProducts()  // 触发重新赋值过滤产品结果集合
        }
    },
    type: {
        type: String,
        value: ''
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    brandIndex: 0,
    positionIndex: 0,
    priceIndex: 0,
    brandOptions: ['全部', '斯蒂卡', '亚萨卡', '蝴蝶', '红双喜'],
    positionOptions: ['全部', '反手', '正手', '速度', '旋转', '控制'],
    priceOptions: ['全部', '50以下', '50-100', '100-200', '200以上'],
    // 过滤后产品
    filteredProducts: [],
    // 所有产品数据
    products: [
        {id: 1, brand: '斯蒂卡',name: 'DNA赤龙', coverPath: '../../images/covers/stiga_jiao_01.jpg', price: '50以下', tag: ""},
        {id: 2, brand: '亚萨卡',text: '飞龙', coverPath: '../../images/covers/yasaka_jiao_01.jpg', price: '50-100'},
    ],
    // 图片存储前缀
    cloudfileurl: '' 
  },

  /**
   * 组件的方法列表
   */
  methods: {

    // 品牌筛选
    onBrandFilter(e) {
      this.setData({
          brandIndex: parseInt(e.detail.value)
      });
      this.filterProducts();
    },

    // 定位筛选
    onPositionFilter(e) {
        this.setData({
            positionIndex: parseInt(e.detail.value)
        });
        this.filterProducts();
    },

    // 价格筛选
    onPriceFilter(e) {
        this.setData({
            priceIndex: parseInt(e.detail.value)
        });
        this.filterProducts();
    },

    // 综合筛选函数
    filterProducts() {
        const { searchKeyword, brandIndex, positionIndex, priceIndex, products, brandOptions, positionOptions, priceOptions } = this.data;
        
        let filtered = products.filter(product => {
                    
            // 关键词搜索匹配（品牌、产品名称）
            const brand = product.brandName || '';
            const text = product.text || '';
            const keywordMatch = !searchKeyword || 
                brand.includes(searchKeyword) || 
                text.includes(searchKeyword);
            
            // console.log(keywordMatch);

            // 品牌筛选匹配
            const brandMatch = brandIndex === 0 || product.brandName === brandOptions[brandIndex];
            
            // 定位筛选匹配
            const position = product.position || '';
            const positionMatch = positionIndex === 0 || 
                position.includes(positionOptions[positionIndex]);
            
            // 价格筛选匹配（简化实现，实际需要更复杂的价格解析）
            const priceMatch = this.checkPriceMatch(product.price, priceIndex);
            
            return keywordMatch && brandMatch && positionMatch && priceMatch;
        });

        this.setData({
            filteredProducts: filtered
        });
    },

    // 价格匹配检查
    checkPriceMatch(priceStr, priceIndex) {
        if (priceIndex === 0) return true;
        if (!priceStr) return false;

        // 提取价格范围数字
        const priceMatch = priceStr.match(/(\d+)/g);
        if (!priceMatch) return false;
        
        const minPrice = parseInt(priceMatch[0]);
        const maxPrice = parseInt(priceMatch[1] || minPrice);
        
        switch (priceIndex) {
            case 1: return maxPrice < 50;      // 50以下
            case 2: return minPrice >= 50 && maxPrice <= 100;   // 50-100
            case 3: return minPrice >= 100 && maxPrice <= 200;  // 100-200
            case 4: return minPrice > 200;     // 200以上
            default: return true;
        }
    },

    // 重置筛选条件
    resetFilters() {
        this.setData({
            searchKeyword: '',
            brandIndex: 0,
            positionIndex: 0,
            priceIndex: 0
        });
        this.filterProducts();
    },

    /**
    * 请求过滤的条件数据，从而进行能够选择条件。
    * 包括品牌、定位、价格等。
    */
    requestFilterData() {
        // 返回过滤的清单。
        return ;
    },

    /**
    *  请求网络数据，请求胶皮产品数据
    * @param size 一次请求的条数
    * @param page 请求的页数是第几页
    * @param filter 请求的过滤条件
    */
    requestProductWithFilter(size,page,filter = {}) {
        return wx.cloud.callFunction({
            name: functionName,
            data,
            ...(env && { config: { env } })
        }).then(res => res.result)
        .catch(err => {
            console.error(`[云函数调用失败] ${functionName}:`, err);
            return Promise.reject(err);
        });
    },

    /**
     * 返回收藏的清单
     * 在记录时从收藏项中来选择可能不太合理了。
     * 后续可以取消这个设计，不要增加复杂度，不方便理解使用。
     */
    requestProductCollected() {
        
    },
  },

  /**
   * 生命周期相关
   */
  lifetimes: {
    attached: function() {
      // 相当于子组件的生命周期方法 onload
      // 初始化请求所有产品清单 - 胶皮列表
    //   console.log("请求数据")
    //   子组件估计无法请求数据，那么只能从父页面中直接请求相关数据，然后传递给子组件使用。

      // 这里初始化数据
      this.setData({
          products: this.data.productData,
          cloudfileurl: getApp().globalData.cloudfileurl 
      });
    }
  },
})